package com.bosssoft.hr.train.j2se.stream;

/**
 * @Class StreamDemo
 * @Description 包含一个 createUserList方法 初始10个 User数组，User对象包含姓名,生日，数据可以随机，使用Arrays对象将数组返回。
 * @Author TangZaoBang
 * @Date 2023/04/27 17:52
 * @Version
 */

import lombok.extern.slf4j.Slf4j;
import java.time.LocalDate;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
public class StreamDemo {
    /**
     * 测试题目内容
     * @author TangZaoBang
     * @date 2023/04/27 19:28
     * @param args 
     * @return void 
     */
    public static void main(String[] args) {
        User[] userArray = createUserArray();
        for (User user:userArray){
            log.info("User[]中："+user.toString());
        };
        List<User> userList = createUserList();
        for (User user:userList){
            log.info("UserList中："+user.toString());
        };
        testStreamApply(userList);

    }

    
    /**
     * 先生成十个User[]
     * @author TangZaoBang
     * @date 2023/04/27 19:28
     * @return com.bosssoft.hr.train.j2se.stream.User[] 
     */
    public static User[] createUserArray() {
        User[] userList = new User[10];
        for (int i = 0; i < userList.length; i++) {
            String name = "User" + (i + 1);
            LocalDate birthday = LocalDate.of(1990 + i, i + 1, i + 1);
            userList[i] = new User(name, birthday);
        }
        return userList;
    }
  /**
   * 将生成的十个User[]通过流转换为List
   * @author TangZaoBang
   * @date 2023/04/27 19:28
   * @return java.util.List<com.bosssoft.hr.train.j2se.stream.User> 
   */
    public static List<User> createUserList() {
        return Arrays.stream(createUserArray()).collect(Collectors.toList());
    }
/**
 * 使用 stream() 方法将用户列表转换为 Stream<User>。使用 filter() 方法来过滤年龄大于 30 的用户，
 * 使用 sorted() 方法来按照年龄进行排序。
 * 使用 peek() 方法来增加每个用户的年龄，
 * 使用 collect() 方法将结果收集到一个新的列表中。
 * @author TangZaoBang
 * @date 2023/04/27 19:29
 * @param users 
 * @return void 
 */
    public static void testStreamApply(List<User> users) {
        List<User> result = users.stream()
                .filter(u -> u.getAge() > 30)
                .sorted(Comparator.comparing(User::getAge))
                .peek(User::increaseAge)
                .collect(Collectors.toList());
        for (User user:result){
            log.info("年龄大于30的人经过排序后年龄再加一后的user:"+user.toString());
        }
    }

}

/**
 * * @Class User
 *  * @Description 专门用于StreamDemo的User
 *  * @Author TangZaoBang
 *  * @Date 2023/04/27 18:52
 *  * @Version
 */
class User{
    private String name;
    private LocalDate birthday;

    public User(String name, LocalDate birthday) {
        this.name = name;
        this.birthday = birthday;
    }

    public String getName() {
        return name;
    }

    public LocalDate getBirthday() {
        return birthday;
    }

    public int getAge() {
        return LocalDate.now().getYear() - birthday.getYear();
    }

    public void increaseAge() {
        birthday = birthday.plusYears(1);
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", birthday=" + birthday +
                '}';
    }
}